home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
—‹Œêsrc.lzh
/
commander.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-02-07
|
27KB
|
635 lines
#include "3DDEF.H"
#include "GLOBAL.H"
#include "FORWARD.H"
#include "XCODE.H"
#include "FORWARD2.H"
/*
#define COMMAND_UNDER_BLANC_MASK 0x00000001 under_blanc する
#define COMMAND_ARG_LOOP_MASK 0x00000002 ループする
#define CHANGED_FLAG_MASK 0x00000004 無条件に変更が発生している
*/
#define TTIME_MASK 0x00000008 /* 変換中は実行してはならない */
#define MACRO_NOT_MASK 0x00000010 /* マクロ定義中は実行してはならない */
#define DO_CTRL_L 0x00000020 /* 実行後 ctrl_l で画面を書き直す */
#define DO_KEY_CLEAR 0x00000040 /* 実行後 fep_key_clear をかける */
#define OK_VIEW 0x00000100 /* view モードで実行して良い */
#define NO_DUMMY 0x00000200 /* ダミーモードでは実行できない */
/*
void etc_ds();
void etc_ds1();
*/
extern UWORD fep_xf_bind_table[MAX_XF];
/*
#define CURRENT_CHANGED (TDATA[CURRENT_TEXT].CHANGED_FLAG)
*/
#define KIIRO_REV 10 /* 黄色のリバース */
int LCN; /* Last Command Number */
int commander_x;
UWORD view_flag = 0;
COMMAND_UNIT command_table[MAX_COMMAND_NUMBER];
COMMAND_UNIT command_table1[MAX_COMMAND_NUMBER];
COMMAND_UNIT command_table0[MAX_COMMAND_NUMBER];
COMMAND_UNIT command_table10[MAX_COMMAND_NUMBER] = {
{{0x201,0},0x00000109,ed_meta_b,"文頭へ"}, /* meta-B */
{{0x202,0},0x0000010b,ed_meta_z,"文末へ"}, /* meta-Z */
{{0x203,0},0x00000008,ed_meta_r,"置換"}, /* meta-R */
{{0x204,0},0x00000108,ed_meta_n,"文末へ向かって文字列検索"}, /* meta-N */
{{0x205,0},0x00000148,ed_ctrl_j_n,"文末へ向かって文字列検索"}, /* meta-N */
{{0x206,0},0x00000108,ed_meta_space,"マークセット"},
{{0x207,0},0x0000000a,ed_ctrl_j_ctrl_w,"範囲削除"}, /* F7 */
{{0x208,0},0x0000000a,ed_ctrl_j_esc_w,"複写"}, /* F8 */
{{0x209,0},0x0000000a,ed_ctrl_j_ctrl_y,"貼付"}, /* F9 */
{{0x20a,0},0x00000008,ed_ctrl_j_2,"二重化"}, /* F10 */
{{0x210,0},0x00000108,mouse_cursor,"マウスでカーソル移動"},
{{0x211,0},0x00000108,ed_meta_f,"新しいファイルの編集"}, /* meta-F */
{{0x212,0},0x00000108,ed_meta_o,"現ファイルを編集前に戻す"}, /* meta-O */
{{0x213,0},0x00000008,ed_meta_u,"文頭に向かって連続置換"}, /* meta-U */
{{0x214,0},0x00000108,ed_meta_s,"文頭に向かって文字列検索"}, /* meta-S */
{{0x215,0},0x00000148,ed_meta_s_next,"文頭に向かって文字列検索"},
{{0x216,0},0x00000109,ed_meta_a,"ファイル切り替え(正順)"}, /* meta-A */
{{0x217,0},0x00000109,ed_meta_d,"ファイル切り替え(逆順)"}, /* meta-D */
{{0x218,0},0x00000008,ed_meta_y,"挿入ファイル読み込み"}, /* meta-Y */
{{0x219,0},0x00000108,ed_meta_w,"一部取り出しファイル作成"}, /* meta-W */
{{0x21a,0},0x00000108,ed_meta_c,"コマンドを実行"}, /* meta-C */
{{FEP_CLR_CODE,0},0x00000100,ed_ctrl_ubar,"生入力キャンセル"},
{{FEP_UNDO_CODE,0},0x00000159,ed_ctrl_j_e,"マクロを実行"},
{{FEP_HOME_CODE,0},0x0000010b,ed_ctrl_j_h,"ホーム"},
{{FEP_HELP_CODE,0},0x00000118,ctrl_t_h,"ヘルプ"},
{{FEP_HELP_CODE | 0x20,0},0x00000118,ctrl_shift_help,"キーバインド初期化"},
{{'\x00',0},0x0000000b,ed_ctrl_at,"なし"}, /* ^@ */
{{'\x01',0},0x0000010b,ed_ctrl_a,"1ワード左へ"}, /* ^A */
{{'\x02',0},0x00000103,ed_ctrl_b,"行頭⇔行末トグル"}, /* ^B */
{{'\x03',0},0x0000010b,ed_ctrl_c,"下ページスクロール"}, /* ^C */
{{'\x04',0},0x00000103,ed_ctrl_d,"右へ"}, /* ^D */
{{'\x05',0},0x00000103,ed_ctrl_e,"上へ"}, /* ^E */
{{'\x06',0},0x0000010b,ed_ctrl_f,"1ワード右へ"}, /* ^F */
{{'\x07',0},0x0000000b,ed_ctrl_g,"吸い込み削除"}, /* ^G */
{{'\x08',0},0x00000003,ed_ctrl_h,"バックスペース"}, /* ^H */
{{'\x09',0},0x00000004,ed_ctrl_i,"タブ"}, /* ^I */
{{'\x0a','\x04',0},0x0000020f,ed_ctrl_j_ctrl_d,"再変換開始"},
{{'\x0a','\x0c',0},0x00000008,ed_ctrl_j_ctrl_l,"アンダーライン"},
{{'\x0a','\x12',0},0x00000008,ed_ctrl_j_ctrl_r,"アンダーライン消去"},
{{'\x0a','\x13',0},0x0000000a,ed_ctrl_j_ctrl_s,"属性付セーブ"},
{{'\x0a','\x14',0},0x0000000b,ed_ctrl_j_ctrl_t,"文字入れ替え"},
{{'\x0a','\x17',0},0x0000000b,ed_ctrl_j_ctrl_w,"範囲削除"}, /* F7 */
{{'\x0a','\x19',0},0x0000000b,ed_ctrl_j_ctrl_y,"貼付"}, /* F9 */
{{'\x0a','\x1b','W',0},0x0000000b,ed_ctrl_j_esc_w,"複写"}, /* F8 */
{{'\x0a','(',0},0x00000009,ed_ctrl_j_pair_left,"左ペア挿入"},
{{'\x0a',')',0},0x00000009,ed_ctrl_j_pair_right,"右ペア挿入"},
{{'\x0a','2',0},0x0000000a,ed_ctrl_j_2,"二重化"},
{{'\x0a','=',0},0x0000010a,ed_ctrl_j_equal,"カーソル位置情報"},
{{'\x0a','A',0},0x00000108,ed_ctrl_j_a,"キーバインド一覧"},
{{'\x0a','B','\r',0},0x0000000b,ed_ctrl_j_b,"バックアップモード切り替え"},
{{'\x0a','C','L','I','C','K','\r',0},0x0000010b,ed_ctrl_j_click,"クリックON/OFF"},
{{'\x0a','C','M','D','\r',0},0x00000118,ed_ctrl_j_cmd,"ED⇔ME切り替え"},
{{'\x0a','D','E','V',0},0x00000018,ed_ctrl_j_dev,"デバイス書き出し"},
{{'\x0a','D','M','\r',0},0x00000108,ed_ctrl_t_dm,"辞書の学習モード切り替え"},
{{'\x0a','E',0},0x00000119,ed_ctrl_j_e,"マクロを実行"},
{{'\x0a','H',0},0x0000010b,ed_ctrl_j_h,"ホーム"},
{{'\x0a','L','\r',0},0x00000108,ed_ctrl_j_l,"下線開閉"},
{{'\x0a','L','0','\r',0},0x00000108,ed_ctrl_j_l0,"下線閉じる"},
{{'\x0a','L','1','\r',0},0x00000108,ed_ctrl_j_l1,"下線開ける"},
{{'\x0a','M','E','\r',0},0x00000118,ed_ctrl_j_me,"MEモードにする"},
{{'\x0a','N',0},0x0000010a,ed_ctrl_j_n,"次検索"}, /* F5 */
{{'\x0a','P','\r',0},0x00000128,ed_ctrl_j_p,"印刷"},
{{'\x0a','P','T','\r',0},0x00000128,ed_ctrl_j_pt,"縦書き印刷"},
{{'\x0a','S','1',0},0x00000108,ed_ctrl_j_s1,"カットバッファよりワーク1へ"},
{{'\x0a','S','2',0},0x00000108,ed_ctrl_j_s2,"カットバッファよりワーク2へ"},
{{'\x0a','T',0},0x00000208,ed_ctrl_j_t,"範囲内再変換"},
{{'\x0a','U','\r',0},0x00000108,ed_ctrl_j_u,"上線開閉"},
{{'\x0a','U','0','\r',0},0x00000108,ed_ctrl_j_u0,"上線閉じる"},
{{'\x0a','U','1','\r',0},0x00000108,ed_ctrl_j_u1,"上線開ける"},
{{'\x0a','W','\r',0},0x0000010a,ed_ctrl_j_w,"上下線開閉"},
{{'\x0a','W','0','\r',0},0x00000108,ed_ctrl_j_w0,"上下線閉じる"},
{{'\x0a','W','1','\r',0},0x00000108,ed_ctrl_j_w1,"上線開/下線閉"},
{{'\x0a','W','2','\r',0},0x00000108,ed_ctrl_j_w2,"上線閉/下線開"},
{{'\x0a','W','3','\r',0},0x00000108,ed_ctrl_j_w3,"上下線開ける"},
{{'\x0b',0},0x0000000b,ed_ctrl_k,"行末まで削除"}, /* ^K */
{{'\x0c',0},0x0000000b,ed_ctrl_l,"カットバッファより貼付"}, /* ^L */
{{'\x0d',0},0x00000007,ed_ctrl_m,"改行"}, /* ^M */
{{'\x0e',0},0x0000000f,ed_ctrl_n,"1行挿入"}, /* ^N */
{{'\x0f',0},0x00000108,ed_ctrl_o,"辞書の学習モード変更"}, /* ^O */
{{'\x10',0},0x0000010b,ed_ctrl_p,"行の右端へ"}, /* ^P */
{{'\x11',0},0x0000010b,ed_ctrl_q,"行の左端へ"}, /* ^Q */
{{'\x12',0},0x0000010b,ed_ctrl_r,"上ページスクロール"}, /* ^R */
{{'\x13',0},0x00000103,ed_ctrl_s,"左へ"}, /* ^S */
{{'\x14',0},0x0000000f,ed_ctrl_t,"1ワード削除"}, /* ^T */
{{'\x15',0},0x00000008,ed_ctrl_u,"行の左端からカーソルまで削除"}, /* ^U */
{{'\x16',0},0x0000000b,ed_ctrl_v,"コントロールコード入力"}, /* ^V */
{{'\x17',0},0x00000109,ed_ctrl_w,"張り付き下スクロール"}, /* ^W */
{{'\x18',0},0x00000103,ed_ctrl_x,"下へ"}, /* ^X */
{{'\x19',0},0x0000000b,ed_ctrl_y,"1行削除"},
{{'\x1a',0},0x0000010b,ed_ctrl_z,"張り付き上スクロール"}, /* ^Z */
{{'\x1b','\x07',0},0x00000108,ed_meta_ctrl_g,"マークジャンプ"},
{{'\x1b','\x0c',0},0x00000109,ed_meta_ctrl_l,"カーソル中央"},
{{'\x1b','\x16',0},0x00000103,ed_meta_ctrl_v,"次ウインドウ次頁"},
{{'\x1b','\x17',0},0x0000000a,ed_meta_ctrl_w,"字詰め改行書き出し"},
{{'\x1b','\x18','\x02',0},0x00000108,ed_ctrl_x_ctrl_b,"バッファの一覧"},
{{'\x1b','\x18','\x09',0},0x0000000a,ed_ctrl_x_ctrl_i,"挿入ファイル読み込み"},
{{'\x1b','\x18','\x0c',0},0x0000000a,ed_ctrl_x_ctrl_l,"指定範囲小文字へ"},
{{'\x1b','\x18','\x0e',0},0x0000010b,ed_ctrl_x_ctrl_n,"張り付き上スクロール"},
{{'\x1b','\x18','\x10',0},0x0000010b,ed_ctrl_x_ctrl_p,"張り付き下スクロール"},
{{'\x1b','\x18','\x15',0},0x0000000a,ed_ctrl_x_ctrl_u,"指定範囲大文字へ"},
{{'\x1b','\x18','\x18',0},0x00000108,ed_ctrl_x_ctrl_x,"カーソル⇔マーク交換"},
{{'\x1b','\x18','\x1a',0},0x00000108,ed_ctrl_x_ctrl_z,"ウインドウ縮小"},
{{'\x1b','\x18',' ',0},0x00000108,ed_ctrl_x_space,"マークの解除"},
{{'\x1b','\x18','$',0},0x00000109,ed_ctrl_x_doller,"チャイルド(直接)"},
{{'\x1b','\x18','0',0},0x00000109,ed_ctrl_x_0,"現在のウインドウを消す"},
{{'\x1b','\x18','1',0},0x00000109,ed_ctrl_x_1,"現在以外のウインドウを消す"},
{{'\x1b','\x18','2',0},0x00000108,ed_ctrl_x_2,"現在のウインドウを2分割"},
{{'\x1b','\x18','B',0},0x00000108,ed_ctrl_x_b,"前バッファ"},
{{'\x1b','\x18','K',0},0x00000108,ed_ctrl_x_k,"バッファの削除"},
{{'\x1b','\x18','N',0},0x00000008,ed_ctrl_x_n,"ファイル名変更"},
{{'\x1b','\x18','O',0},0x00000109,ed_ctrl_x_o,"後のウインドウへ"},
{{'\x1b','\x18','P',0},0x00000109,ed_ctrl_x_p,"前のウインドウへ"},
{{'\x1b','\x18','^',0},0x00000108,ed_ctrl_x_up_arrow,"ウインドウの拡大"},
{{'\x1b','\x1a',0},0x00000103,ed_meta_ctrl_z,"次ウインドウ前頁"},
{{'\x1b','\x1b',0},0x00000108,ed_ctrl_j_equal,"カーソル位置情報"},
{{'\x1b',' ',0},0x00000108,ed_meta_space,"マークセット"}, /* ,,, */
{{'\x1b','.',0},0x00000108,ed_meta_space,"マークセット"},
{{'\x1b','0',0},0x00000108,ed_meta_arg0,"アーギュメント"},
{{'\x1b','1',0},0x00000108,ed_meta_arg1,"アーギュメント"},
{{'\x1b','2',0},0x00000108,ed_meta_arg2,"アーギュメント"},
{{'\x1b','3',0},0x00000108,ed_meta_arg3,"アーギュメント"},
{{'\x1b','4',0},0x00000108,ed_meta_arg4,"アーギュメント"},
{{'\x1b','5',0},0x00000108,ed_meta_arg5,"アーギュメント"},
{{'\x1b','6',0},0x00000108,ed_meta_arg6,"アーギュメント"},
{{'\x1b','7',0},0x00000108,ed_meta_arg7,"アーギュメント"},
{{'\x1b','8',0},0x00000108,ed_meta_arg8,"アーギュメント"},
{{'\x1b','9',0},0x00000108,ed_meta_arg9,"アーギュメント"},
{{'\x1b','@',0},0x00000108,ed_meta_at,"マクロ定義開始/終了"}, /* meta-AT */
{{'\x1b','A',0},0x00000109,ed_meta_a,"ファイル切り替え(正順)"}, /* meta-A */
{{'\x1b','B',0},0x00000109,ed_meta_b,"文頭へ"}, /* meta-B */
{{'\x1b','C',0},0x00000108,ed_meta_c,"コマンドを実行"}, /* meta-C */
{{'\x1b','D',0},0x00000109,ed_meta_d,"ファイル切り替え(逆順)"}, /* meta-D */
{{'\x1b','E',0},0x00000008,ed_meta_e,"セーブして終了"}, /* meta-E */
{{'\x1b','F',0},0x00000108,ed_meta_f,"新しいファイルの編集"}, /* meta-F */
{{'\x1b','H',0},0x00000008,ed_meta_h,"セーブ"}, /* meta-H */
{{'\x1b','I',0},0x00000108,ed_meta_i,"タブ表示の切替"}, /* meta-I */
{{'\x1b','J',0},0x00000008,ed_meta_j,"文末への確認置換"}, /* meta-J */
{{'\x1b','K',0},0x00000109,ed_meta_k,"現ファイルを編集前の状態で終了"},/* meta-K */
{{'\x1b','L',0},0x00000008,ed_meta_l,"文頭に向かって確認置換"}, /* meta-L */
{{'\x1b','M',0},0x00000108,ed_meta_m,"改行記号の表示切り替え"}, /* meta-M */
{{'\x1b','N',0},0x00000108,ed_meta_n,"文末へ向かって文字列検索"}, /* meta-N */
{{'\x1b','O',0},0x00000108,ed_meta_o,"現ファイルを編集前に戻す"}, /* meta-O */
{{'\x1b','Q',0},0x00000109,ed_meta_q,"終了"}, /* meta-Q */
{{'\x1b','R',0},0x00000008,ed_meta_r,"置換"}, /* meta-R */
{{'\x1b','S',0},0x00000108,ed_meta_s,"文頭に向かって文字列検索"}, /* meta-S */
{{'\x1b','T',0},0x0000000c,ed_meta_t,"ファイル名変更"}, /* meta-T */
{{'\x1b','U',0},0x00000008,ed_meta_u,"文頭に向かって連続置換"}, /* meta-U */
{{'\x1b','V',0},0x00000108,ed_meta_v,"タグジャンプ"}, /* meta-V */
{{'\x1b','W',0},0x00000008,ed_meta_w,"一部取り出しファイル作成"}, /* meta-W */
{{'\x1b','X',0},0x00000008,ed_meta_x,"現ファイルをセーブ、次へ"}, /* meta-X */
{{'\x1b','Y',0},0x00000008,ed_meta_y,"挿入ファイル読み込み"}, /* meta-Y */
{{'\x1b','Z',0},0x0000010b,ed_meta_z,"文末へ"}, /* meta-Z */
{{'\x1b',']',0},0x00000008,ed_meta_KO,"大/小文字変換モードのトグル"},/* meta-] */
{{'\x1b','n','\r',0},0x00000108,ed_nop,"第n行へ移動"}, /* !!! never match */
{{'\x1b','n','\x09',0},0x00000108,ed_nop,"タブ数を設定"}, /* !!! never match */
{{'\x1b','n','F',0},0x00000108,ed_nop,"カラム数設定"}, /* !!! never match */
{{'\x1d',0},0x00000009,ed_ctrl_KO,"大/小文字変換"}, /* ctrl-] */
{{'\x1f',0},0x00000000,ed_ctrl_ubar,"生入力キャンセル"}};
COMMAND_UNIT command_table00[MAX_COMMAND_NUMBER] = {
{{'\x00',0},0x0000000b,ctrl_at,"なし"},
{{0x201,0},0x0000010b,meta_left_blaket,"文頭へ"},
{{0x202,0},0x0000010b,meta_right_blaket,"文末へ"},
{{0x203,0},0x00000008,meta_r,"置換"},
{{0x204,0},0x0000010a,ctrl_s,"検索"},
{{0x205,0},0x0000014a,ctrl_s_next,"次検索"},
{{0x206,0},0x00000108,meta_space,"マークセット"},
{{0x207,0},0x00000009,ctrl_w,"範囲削除"},
{{0x208,0},0x00000108,meta_w,"カットバッファへ転写"},
{{0x209,0},0x0000000a,ctrl_y,"貼り付け"},
{{0x20a,0},0x00000009,meta_z,"セーブして終了"},
{{0x210,0},0x00000108,mouse_cursor,"マウスでカーソル移動"},
{{0x211,0},0x00000108,ctrl_x_up_arrow,"ウインドウを拡大"},
{{0x212,0},0x00000108,ctrl_x_ctrl_z,"現ウインドウを縮小"},
{{0x213,0},0x00000008,meta_ctrl_r,"確認置換"},
{{0x214,0},0x0000010a,ctrl_r,"逆方向検索"},
{{0x215,0},0x0000014a,ctrl_r_next,"逆方向次検索"},
#if 0
{{0x216,0},0x00000100,etc_ds,""},/* ,,, */
{{0x217,0},0x00000100,etc_ds1,""},/* ,,, */
#endif
{{FEP_CLR_CODE,0},0x00000000,ctrl_ubar,"生入力キャンセル"},
{{FEP_UNDO_CODE,0},0x00000159,ctrl_x_e,"マクロを実行"},
{{FEP_HELP_CODE,0},0x00000118,ctrl_t_h,"ヘルプ"},
{{FEP_HOME_CODE,0},0x00000109,ctrl_x_o,"後のウインドウへ"},
{{FEP_HELP_CODE | 0x20,0},0x00000118,ctrl_shift_help,"キーバインド初期化"},
{{'\x01',0},0x0000010b,ctrl_a,"行頭へ"},
{{'\x02',0},0x00000103,ctrl_b,"左へ"},
{{'\x03',0},0x0000000f,ctrl_c,"右にスペース"},
{{'\x04',0},0x0000000b,ctrl_d,"吸い込み削除"},
{{'\x05',0},0x0000010b,ctrl_e,"行末へ"},
{{'\x06',0},0x00000103,ctrl_f,"右へ"},
{{'\x07',0},0x00000100,ctrl_g,"中断"},
{{'\x08',0},0x00000003,ctrl_h,"左へ削除"},
{{'\x09',0},0x00000004,ctrl_i,"タブ"},
{{'\x0a',0},0x00000007,ctrl_j,"インデント付き改行"},
{{'\x0b',0},0x0000000b,ctrl_k,"行末まで削除"},
{{'\x0c',0},0x0000010b,ctrl_l,"画面を描き直す"},
{{'\x0d',0},0x00000007,ctrl_m,"改行"},
{{'\x0e',0},0x00000103,ctrl_n,"下へ"},
{{'\x0f',0},0x0000000f,ctrl_o,"行を開ける"},
{{'\x10',0},0x00000103,ctrl_p,"上へ"},
{{'\x11',0},0x0000000b,ctrl_q,"コントロールコード入力"},
{{'\x12',0},0x0000010a,ctrl_r,"逆方向検索"},
{{'\x13',0},0x0000010a,ctrl_s,"検索"},
{{'\x14','\x06',0},0x0000020f,ctrl_t_ctrl_f,"再変換開始"},
{{'\x14','\x09',0},0x00000109,ctrl_t_ctrl_i,"TAB の表示切り替え"},
{{'\x14','\x0c',0},0x00000008,ctrl_t_ctrl_l,"アンダーライン"},
{{'\x14','\x0d',0},0x00000109,ctrl_t_ctrl_m,"改行の表示切り替え"},
{{'\x14','\x12',0},0x00000008,ctrl_t_ctrl_r,"アンダーライン消去"},
{{'\x14','\x13',0},0x00000008,ctrl_t_ctrl_s,"情報付セーブ"},
{{'\x14','\x14',0},0x0000000b,ctrl_t_ctrl_t,"入れ替え"},
{{'\x14','\x17',0},0x0000000a,ctrl_t_ctrl_w,"字詰め改行書き出し"},
{{'\x14','(',0},0x00000009,ctrl_t_pair_left,"左ペア挿入"},
{{'\x14',')',0},0x00000009,ctrl_t_pair_right,"右ペア挿入"},
{{'\x14','B','\r',0},0x0000000b,ctrl_t_b,"バックアップモード切り替え"},
{{'\x14','C','L','I','C','K','\r',0},0x0000010b,ctrl_t_click,"クリック切り替え"},
{{'\x14','C','M','D','\r',0},0x00000118,ctrl_t_cmd,"ED⇔ME"},
{{'\x14','D','E','V',0},0x00000018,ctrl_t_dev,"デバイス書き出し"},
{{'\x14','D','M','\r',0},0x00000108,ctrl_t_dm,"辞書の学習モード切り替え"},
{{'\x14','E','D','\r',0},0x00000118,ctrl_t_ed,"EDモードにする"},
{{'\x14','H',0},0x00000118,ctrl_t_h,"ヘルプ"},
{{'\x14','L','\r',0},0x00000108,ctrl_t_l,"下線開閉"},
{{'\x14','L','0','\r',0},0x00000108,ctrl_t_l0,"下線閉じる"},
{{'\x14','L','1','\r',0},0x00000108,ctrl_t_l1,"下線開ける"},
{{'\x14','P','A','G','E','\r',0},0x0000010c,ctrl_t_PAGE,"ページ長さ設定"},
{{'\x14','P','\r',0},0x00000128,ctrl_t_p,"印刷"},
{{'\x14','P','T','\r',0},0x00000128,ctrl_t_pt,"縦書き印刷"},
{{'\x14','S','1',0},0x00000108,ctrl_t_s1,"カットバッファよりワーク1へ"},
{{'\x14','S','2',0},0x00000108,ctrl_t_s2,"カットバッファよりワーク2へ"},
{{'\x14','T',0},0x00000208,ctrl_t_t,"範囲内再変換"},
{{'\x14','U','\r',0},0x00000108,ctrl_t_u,"上線開閉"},
{{'\x14','U','0','\r',0},0x00000108,ctrl_t_u0,"上線閉じる"},
{{'\x14','U','1','\r',0},0x00000108,ctrl_t_u1,"上線開ける"},
{{'\x14','V',0},0x00000108,ctrl_t_v,"タグジャンプ"},
{{'\x14','W','\r',0},0x00000108,ctrl_t_w,"上下線開閉"},
{{'\x14','W','0','\r',0},0x00000108,ctrl_t_w0,"上下線閉じる"},
{{'\x14','W','1','\r',0},0x00000108,ctrl_t_w1,"上線開/下線閉"},
{{'\x14','W','2','\r',0},0x00000108,ctrl_t_w2,"上線閉/下線開"},
{{'\x14','W','3','\r',0},0x00000108,ctrl_t_w3,"上下線開ける"},
{{'\x15',0},0x00000108,ctrl_u,"実行回数指定"},
{{'\x16',0},0x0000010b,ctrl_v,"下ページスクロール"},
{{'\x17',0},0x00000009,ctrl_w,"範囲削除"},
{{'\x18','\x02',0},0x00000108,ctrl_x_ctrl_b,"バッファの一覧"},
{{'\x18','\x03',0},0x00000109,ctrl_x_ctrl_c,"終了"},
{{'\x18','\x06',0},0x0000010a,ctrl_x_ctrl_f,"ファイル読み込み"},
{{'\x18','\x09',0},0x0000000a,ctrl_x_ctrl_i,"挿入ファイル読み込み"},
{{'\x18','\x0c',0},0x0000000a,ctrl_x_ctrl_l,"指定範囲小文字へ"},
{{'\x18','\x0e',0},0x0000010b,ctrl_x_ctrl_n,"張り付き上スクロール"},
{{'\x18','\x0f',0},0x00000009,ctrl_x_ctrl_o,"空行削除"},
{{'\x18','\x10',0},0x0000010b,ctrl_x_ctrl_p,"張り付き下スクロール"},
{{'\x18','\x12',0},0x00000008,ctrl_x_ctrl_r,"文頭に向かって確認置換"},
{{'\x18','\x13',0},0x00000008,ctrl_x_ctrl_s,"情報無しセーブ"},
{{'\x18','\x15',0},0x0000000a,ctrl_x_ctrl_u,"指定範囲大文字へ"},
{{'\x18','\x17',0},0x00000008,ctrl_x_ctrl_w,"ファイル書き出し"},
{{'\x18','\x18',0},0x00000108,ctrl_x_ctrl_x,"カーソル⇔マーク交換"},
{{'\x18','\x1a',0},0x00000108,ctrl_x_ctrl_z,"現ウインドウを縮小"},
{{'\x18',' ',0},0x00000108,ctrl_x_space,"マークの解除"},
{{'\x18','$',0},0x00000109,ctrl_x_doller,"チャイルド(直接)"},
{{'\x18','!',0},0x00000109,ctrl_x_gyo,"コマンドを実行"},
{{'\x18','(',0},0x00000118,ctrl_x_left_braket,"マクロ記録開始"},
{{'\x18',')',0},0x00000108,ctrl_x_right_braket,"マクロ記録終了"},
{{'\x18','0',0},0x00000109,ctrl_x_0,"現ウインドウを消す"},
{{'\x18','1',0},0x00000109,ctrl_x_1,"現ウインドウ以外を消す"},
{{'\x18','2',0},0x00000108,ctrl_x_2,"ウインドウを2分割"},
{{'\x18','=',0},0x00000108,ctrl_x_equal,"レポート"},
{{'\x18','B',0},0x00000108,ctrl_x_b,"前バッファ"},
{{'\x18','C',0},0x00000109,ctrl_x_c,"シェルを起動"},
{{'\x18','E',0},0x00000119,ctrl_x_e,"マクロを実行"},
{{'\x18','F',0},0x00000108,ctrl_x_f,"カラム数設定"},
{{'\x18','K',0},0x00000108,ctrl_x_k,"バッファの削除"},
{{'\x18','N',0},0x00000008,ctrl_x_n,"ファイル名変更"},
{{'\x18','O',0},0x00000109,ctrl_x_o,"後のウインドウへ"},
{{'\x18','P',0},0x00000109,ctrl_x_p,"前のウインドウへ"},
{{'\x18','R',0},0x00000008,ctrl_x_r,"文頭に向かって連続置換"},
{{'\x18','W',0},0x00000108,ctrl_x_w,"ウインドウの行数設定"},
{{'\x18','X',0},0x00000109,ctrl_x_x,"ファイル切り替え(昇順)"},
{{'\x18','^',0},0x00000108,ctrl_x_up_arrow,"ウインドウの拡大"},
{{'\x19',0},0x0000000b,ctrl_y,"貼り付け"},
{{'\x1a',0},0x0000010b,ctrl_z,"上ページスクロール"}, /* 上ページ */
{{'\x1b','\x07',0},0x00000108,meta_ctrl_g,"マークジャンプ"},
{{'\x1b','\x08',0},0x00000008,meta_ctrl_h,"左1ワード削除"},
{{'\x1b','\x0c',0},0x00000109,meta_ctrl_l,"カーソル中央"},
{{'\x1b','\x12',0},0x00000008,meta_ctrl_r,"確認置換"},
{{'\x1b','\x16',0},0x00000103,meta_ctrl_v,"次ウインドウ次頁"},
{{'\x1b','\x1a',0},0x00000103,meta_ctrl_z,"次ウインドウ前頁"},
{{'\x1b','\x1b',0},0x00000108,ctrl_x_equal,"レポート"},
{{'\x1b',' ',0},0x00000108,meta_space,"マークセット"},
{{'\x1b','.',0},0x00000108,meta_space,"マークセット"},
{{'\x1b','0',0},0x00000108,meta_arg0,"アーギュメント"},
{{'\x1b','1',0},0x00000108,meta_arg1,"アーギュメント"},
{{'\x1b','2',0},0x00000108,meta_arg2,"アーギュメント"},
{{'\x1b','3',0},0x00000108,meta_arg3,"アーギュメント"},
{{'\x1b','4',0},0x00000108,meta_arg4,"アーギュメント"},
{{'\x1b','5',0},0x00000108,meta_arg5,"アーギュメント"},
{{'\x1b','6',0},0x00000108,meta_arg6,"アーギュメント"},
{{'\x1b','7',0},0x00000108,meta_arg7,"アーギュメント"},
{{'\x1b','8',0},0x00000108,meta_arg8,"アーギュメント"},
{{'\x1b','9',0},0x00000108,meta_arg9,"アーギュメント"},
{{'\x1b','<',0},0x0000010b,meta_left_blaket,"文頭へ"},
{{'\x1b','>',0},0x0000010b,meta_right_blaket,"文末へ"},
{{'\x1b','A',0},0x00000108,meta_a,"キーバインド一覧"},
{{'\x1b','B',0},0x0000010b,meta_b,"1ワード左へ"},
{{'\x1b','C',0},0x0000000b,meta_c,"ケース大文字へ"},
{{'\x1b','D',0},0x0000000b,meta_d,"右1ワード削除"},
{{'\x1b','F',0},0x0000010b,meta_f,"1ワード右へ"},
{{'\x1b','G',0},0x00000109,meta_g,"第n行へ移動"},
{{'\x1b','L',0},0x0000000b,meta_l,"1ワード小文字へ"},
{{'\x1b','R',0},0x00000008,meta_r,"置換"},
{{'\x1b','U',0},0x0000000b,meta_u,"1ワード大文字へ"},
{{'\x1b','V',0},0x0000010b,meta_v,"上ページスクロール"},
{{'\x1b','W',0},0x00000108,meta_w,"カットバッファへ転写"},
{{'\x1b','Z',0},0x00000009,meta_z,"セーブして終了"},
{{'\x1b','~',0},0x0000000b,meta_upper_bar,"変更フラグを取り消す"},
{{'\x1b','n','\x09',0},0x00000108,ed_nop,"タブ数を設定"}, /* !!! never matck */
{{'\x1f',0},0x00000000,ctrl_ubar,"生入力キャンセル"}};
int
commander0()
{
register UINT c,i,j,n;
int flag;
UWORD cs[MAX_COMMAND_STROKE];
*cs = EOS;
i = 0;
while(1) {
while(!(c = fep_inkey_command(i))); /* コマンドであることをにらみつつ入力 */
for(flag = n = 0;n < MAX_COMMAND_NUMBER;n++) {
for(j = 0;j < i;j++) {
if (cs[j] != command_table[n].COMMAND_STRING[j]) {
break;
}
}
if (i == j) { /* 直前までマッチした */
if (c == command_table[n].COMMAND_STRING[i]) { /* ここまで一致した */
if (command_table[n].COMMAND_STRING[i+1]){
flag = 1; /* まだマッチしていない */
} else {
return(n); /* マッチでーす */
}
}
}
}
if (flag) { /* 未決につき続行 */
if (!i) {
if (c == '['-'@') {
if (CMDMOD) {
under_blanc();
window_abs_loc(0,UNDER_Y);
etc_color(KIIRO_REV);
B_PRINT(" ESC ");
etc_color(NORMAL);
work_cursor_cpx();
commander_x = 10;
} else {
under_print((STR)"[META]");
commander_x = 6;
}
} else {
UBYTE um[MAXLINE];
sprintf(um,"[CTRL-%c]",c+'@');
under_print((STR) um);
commander_x = 8;
}
} else { /* i >= 1 */
if (c >= 0x20) {
under_print_x(commander_x,(UBYTE)'-');
under_print_x(commander_x+1,c);
commander_x += 2;
} else {
under_print_x(commander_x,(UBYTE)'-');
under_print_x(commander_x+1,(UBYTE)'^');
under_print_x(commander_x+2,c+'@');
commander_x += 3;
}
}
cs[i++] = c;
} else {
if (!i) { /* i は0である */
/* 文字の入力、もしくはファンクションキー */
return(c+MAX_COMMAND_NUMBER); /* ゲタをはかせて返る */
} else { /* 未定義のコマンドストロークであった */
return(-1);
}
}
}
}
void
commander()
{
register int cn,a;
register int code;
register UINT CF;
if ((cn = commander0()) >= 0) { /* 有効なコマンドを得た */
if (cn < MAX_COMMAND_NUMBER) { /* コマンドである */
/*
window0();
printf("%d",cn);
binkey();
*/
CF = command_table[cn].COMMAND_FLAG;
/* if ((TBUFFC || TBUFFC_R) && (CF & TTIME_MASK) && !view_flag) {*/
if ((TBUFFC || TBUFFC_R) && (CF & TTIME_MASK)) {
/* 変換中は実行しては行けないコマンドである */
under_print((STR)"確定してから実行して下さい");
fep_key_clear();
CF = 0;
return;
}
if ((CF & MACRO_NOT_MASK) && MACRO_DEF_FLAG) {
/* マクロで実行してはいけない */
MACRO_SEQUENCE[0] = 0;
MACRO_COUNT = MACRO_DEF_FLAG = 0;
etc_beep();
under_print((STR)"マクロに含まれてはいけないコマンドです");
return;
}
if (!(CF & OK_VIEW) && view_flag) { /* view で実行してはいけないコマンドである */
etc_beep();
under_print((STR)"[このバッファは編集できません]");
xf_init_tb();
return;
}
if ((CF & NO_DUMMY) && DUM_FLAG) { /* dummy で実行してはいけないコマンドである */
etc_beep();
under_print((STR)"[ダミーモードでは実行できません]");
return;
}
disp_cursor_off(); /* カーソルを消す */
(*command_table[cn].FUNCTION)();
commander_do_CF(CF);
fep_key_clear(); /* キーバッファのクリア:バッファはクリアしない */
if (a = etc_get_arg()) { /* 回数指定! */
if ((cn = commander0()) >= 0) {/* 有効なコマンドを得た */
if (cn < MAX_COMMAND_NUMBER) {/* コマンドである */
CF = command_table[cn].COMMAND_FLAG;
if (CF & COMMAND_ARG_LOOP_MASK) {
/* コマンドである、かつループ者 */
under_print((STR)"[ESC] もしくは [CTRL-G] で中止");
for(;a > 0;a--) {
if (((code = fep_get_key()) == '['-'@') ||
(code == 'G'-'@')) {
ctrl_g();
break;
}
(*command_table[cn].FUNCTION)();
commander_do_CF(CF);
}
if (!code) { /* 中断した */
under_blanc();
}
} else {
etc_push_arg(a);/* アーギュメントを戻す */
(*command_table[cn].FUNCTION)();/* 実行 */
commander_do_CF(CF);
}
} else { /* 文字列の挿入である */
if (view_flag) {
etc_beep();
under_print((STR)"[このバッファは編集できません]");
xf_init_tb();
} else {
cn -= MAX_COMMAND_NUMBER; /* ゲタを脱がせる */
if (cn < 0x100) { /* 普通の1バイトコード */
under_print((STR)"[ESC] もしくは [CTRL-G] で中止");
for(;a > 0;a--) {
if (((code = fep_get_key()) == '['-'@') ||
(code == 'G'-'@')) {
ctrl_g();
break;
}
work_insert1(cn);
}
if (!code) { /* 中断した */
under_blanc();
}
} else if (cn >= 0x8000) { /* 2バイトコード */
under_print((STR)"[ESC] もしくは [CTRL-G] で中止");
for(;a > 0;a--) {
if (((code = fep_get_key()) == '['-'@') ||
(code == 'G'-'@')) {
ctrl_g();
break;
}
work_insert2(cn);
}
if (!code) { /* 中断した */
under_blanc();
}
}
}
work_cursor_cpx();
}
} else {
under_print((STR)"[未定義キーです]");
etc_beep();
}
}
work_cursor_cpx();
disp_cursor_on(); /* カーソルを出す */
disp_show_cursor(); /* カーソルのブリンクを強制的にオンにする */
} else { /* 文字列の挿入である,,, */
if (view_flag) {
etc_beep();
under_print((STR)"[このバッファは編集できません]");
xf_init_tb();
} else {
cn -= MAX_COMMAND_NUMBER; /* ゲタを脱がせる */
if (cn < 0x100) { /* 普通の1バイトコード */
if (SP_XFER && TBUFFC && (cn == ' ')) {
xf(0x103);
} else {
work_insert1(cn);
change_check();
}
} else if (cn >= 0x8000) { /* 2バイトコード */
if (SP_XFER && TBUFFC && (cn == L' ')) {
xf(0x103);
} else {
work_insert2(cn);
change_check();
}
} else { /* ファンクション or XF */
if (cn < MAX_XF) {
cn = fep_xf_bind_table[cn];
}
xf(cn);
}
}
work_cursor_cpx();
}
} else {
under_print((STR)"[未定義キーです]");
etc_beep();
}
LCN = cn;
}
int
commander_is_last_cut_buff_type()
{
return(((0 <= LCN) && (LCN < MAX_COMMAND_NUMBER)) &&
/* 直前が有効なコマンドであった */
((command_table[LCN].FUNCTION == ctrl_k) || /* そして ctrl_k か */
(command_table[LCN].FUNCTION == ctrl_w) || /* ctrl_w か */
(command_table[LCN].FUNCTION == meta_w))); /* meta_w か */
}
void
commander_do_CF(UINT CF)
{
if (CF & COMMAND_UNDER_BLANC_MASK) {
under_blanc();
}
if (CF & CHANGED_FLAG_MASK) {
change_check();
}
if (CF & DO_CTRL_L) { /* 実行後に ctrl_l */
ctrl_l();
}
if (CF & DO_KEY_CLEAR) { /* 実行後に fep_eky_clear */
fep_key_clear();
etc_while_fep_qxf();
}
}